/**
 * @file TEST_two_task.c
 * @author Linquan  
 * @brief 
 * @version 1.0
 * @date 2024-05-11
 * 
 * @copyright Copyright (c) 2024
 * 模块说明：
 * 		使用 task框架，建立两个任务链表，传入不同的时间片长度，控制同一时基下，任务不同调度时间。
 * 		传入10、100.传入100的 first_task 调度速度 是 传入10 的second_task的10倍。
 * 		同一时基，first任务的计数更快。
 */

#include "app_config.h"
#if TEST_TWO_TASK

#include "TEST_two_task.h"
#include <stdio.h>
#include <stdint.h>
#include "tasks.h"
#include "sys_tick.h"


/* 在相同的定时器中断时间中，每个节拍所定义的时间长度不同 */ 
#define FIRST_TASK_TICK_TIME  100  
#define SECOND_TASK_TICK_TIME 10

#define LED_TASK_TIME 1000

/*****************FIRST TASK***********************/

struct tasks_t first_tasklist;
static uint8_t first_tasksbuf[sizeof(struct task_node_t)* 32];

int first_task_led(struct task_args_t* args)
{
	static int i = 0;

	printf("-----FIRST task test -------\n");

	return LED_TASK_TIME;
}

/**
 * @brief 另一个任务的任务节拍回调函数
 * 
 */
static void first_TaskTick_Callbak()
{
	task_time_add(&first_tasklist);
	
}

/**
 * @brief 另一个任务列表的初始化
 * 
 */
void first_task_Init()
{
	tasks_init_withbuf(&first_tasklist, first_tasksbuf, sizeof(first_tasksbuf), FIRST_TASK_TICK_TIME);// 10 代表中断回调一次是10ms	
	
    sys_timer_callback_add(&first_TaskTick_Callbak); // 赋值 定时器回调函数
	
	tasks_add_task(&first_tasklist, 0, &first_task_led, 0,0,0);// 这里的时间（0）代表任务第一次执行延时的间隔，无间隔。
}

/**
 * @brief 另一个任务的任务调度
 * 
 */
void  first_task_do_task()
{ 
	tasks_schedule(&first_tasklist);
}

/***************** FIRST TASK END ***********************/


/*****************SECOND TASK***********************/

struct tasks_t second_tasklist;
static uint8_t second_tasksbuf[sizeof(struct task_node_t)* 32];

int second_task_led(struct task_args_t* args)
{
	static int i = 0;

	printf("||||| SECOND task test ||||||\n");

	return LED_TASK_TIME;
}

/**
 * @brief 另一个任务的任务节拍回调函数
 * 
 */
static void second_TaskTick_Callbak()
{
	task_time_add(&second_tasklist);
}

/**
 * @brief 另一个任务列表的初始化
 * 
 */
void second_task_Init()
{
	tasks_init_withbuf(&second_tasklist, second_tasksbuf, sizeof(second_tasksbuf), SECOND_TASK_TICK_TIME);// 10 代表中断回调一次是10ms	
	
    sys_timer_callback_add(&second_TaskTick_Callbak); // 赋值 定时器回调函数
	
	tasks_add_task(&second_tasklist, 0, &second_task_led, 0,0,0);// 这里的时间（0）代表任务第一次执行延时的间隔，无间隔。
}

/**
 * @brief 另一个任务的任务调度
 * 
 */
void  second_task_do_task()
{ 
	tasks_schedule(&second_tasklist);
}

/***************** SECOND TASK END ***********************/




void TEST_two_task_init()
{
    first_task_Init();
    second_task_Init();
}
EXPORT_Lv6_APP_INIT(TEST_two_task_init, NULL);


void TEST_two_task_schedule()
{
    first_task_do_task();
    second_task_do_task();
}
EXPORT_Lv7_APP_MANGE(TEST_two_task_schedule,NULL);

# endif


